/*
 * Copyright (c) 1990, 2022, shwfed and/or its affiliates. All rights reserved.
 *
 * @date: 2022-08-24
 *
 */
package cn.junglead.common.utils;

import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
import java.util.Base64;

/**
 * 编码工具类，注意BASE64是编码工具，不是加解密工具
 *
 * @author Gary.Wang
 * @version 1.0
 */
public final class CodeUtil {

	private CodeUtil(){}

    /**
     * BASE64编码
     * @param plaintext 明文
     * @return 返回编码后的结果
     */
    public static String base64Code(String plaintext){
        return Base64.getEncoder().encodeToString(plaintext.getBytes(StandardCharsets.UTF_8));
    }

    /**
     * BASE64解码
     * @param ciphertext 密文
     * @return 返回解码后的结果
     */
    public static String base64Decode(String ciphertext){
        byte[] decode = Base64.getDecoder().decode(ciphertext);
        return new String(decode, StandardCharsets.UTF_8);
    }

	/**
	 * 秘钥编码
	 * @param key 秘钥对象
	 * @return 返回秘钥文本
	 */
	public static String encodeKey(SecretKey key) {
		return Base64.getEncoder().encodeToString(key.getEncoded());
	}

	/**
	 * 秘钥解码
	 * @param encodedKey 秘钥文本
	 * @param algorithm 密钥算法
	 * @return 返回秘钥对象
	 */
	public static SecretKey decodeKey(String encodedKey, String algorithm) {
		byte[] keyBytes = Base64.getDecoder().decode(encodedKey);
		return new SecretKeySpec(keyBytes, algorithm);
	}
}
